package com.suoluo.zenadmin.oss;

import java.io.File;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;


public interface OSSService {
	
//	/**
//	 * 上传图片到OSS,并且会压缩图片
//	 * @param file 上传的文件
//	 * @return
//	 */
//	public ImageName putAndCompressImage(File file);
	
//	/**
//	 * 上传图片到OSS,并且会压缩图片
//	 * @param filePath 上传的图片路径，完整的路径
//	 * @return
//	 */
//	public ImageName putAndCompressImage(String filePath);
	
//	/**
//	 * 上传图片OSS,并且会压缩图片
//	 * @param file 客户端上传的图片
//	 * @return
//	 */
//	public ImageName putAndCompressImage(MultipartFile file);
	
//	/**
//	 * 批量上传图片和压缩图片
//	 * @param files 客户端上传的图片
//	 * @return
//	 */
//	public List<ImageName> putAndCompressImage(MultipartFile [] files);
	
	/**
	 * 上传图片
	 * @param file 上传的图片文件
	 * @return
	 */
	public String putImage(File file);
	
	/**
	 * 上传图片
	 * @param filePath 上传的图片路径，完整的路径
	 * @return
	 */
	public String putImage(String filePath);
	
	/**
	 * 上传图片
	 * @param file 客户端选择的图片
	 * @return 
	 */
	public String putImage(MultipartFile file);
	
	/**
	 * 批量上传图片
	 * @param files
	 * @return
	 */
	public List<String> putImages(MultipartFile [] files);
	
//	/**
//	 * 上传图片
//	 * @param is 上传的图片数据流
//	 * @param fileName 文件名称
//	 * @param length 文件长度
//	 */
//	public String putImage(InputStream is,String fileName,long length);
	
//	/**
//	 * 更新图片原始图片和小图片
//	 * @param filePath 图片路径
//	 * @param oldImageName 原始图片的名称
//	 */
//	public ImageName updateImage(String filePath,ImageName oldImageName);
	
//	/**
//	 * 更新图片原始图片和小图片
//	 * @param file 图片文件
//	 * @param oldImageName 原始图片的名称
//	 * @return
//	 */
//	public ImageName updateImage(File file,ImageName oldImageName);
	
//	/**
//	 * 更新图片原始图片和小图片
//	 * @param file 客户端替换的图片
//	 * @param oldImageName 原始图片的名称
//	 * @return
//	 */
//	public ImageName updateImage(MultipartFile file,ImageName oldImageName);
	
	/**
	 * 修改图片
	 * @param file 上传的图片
	 * @param oldImageName 老的图片名称
	 * @return
	 */
	public String updateImage(MultipartFile file,String oldImageName);
	
	/**
	 * 删除图片
	 * @param key 图片的名称
	 */
	public void deleteImage(String key);
	
//	/**
//	 * 删除图片
//	 * @param imageName 包含原始图片和小图片
//	 */
//	public void deleteImage(ImageName imageName);
	
	/**
	 * 批量删除文件
	 * @param names 文件名称列表
	 */
	public void deleteImages(List<String> names);
	
	/**
	 * 拷贝图片
	 * @param key OSS对应的图片的key
	 * @param destImageName 新图片的名称源
	 * @return
	 */
	public String copyImage(String key,String destImageName);
	
	/**
	 * 保存临时图片
	 * @param file
	 * @return
	 */
	public String putTempImage(MultipartFile file);
	
//	/**
//	 * 拷贝原始图片和小图片
//	 * @param key OSS对应的图片的key
//	 * @param destImageName 新图片的名称源
//	 * @return
//	 */
//	public ImageName copyImage(ImageName key,String destImageName);
	
	/**
	 * 读取图片信息
	 * @param key
	 * @return
	 */
	public byte[] readImage(String key);
	
//	public class ImageName{
//		private String origName;
//		private String miniName;
//
//		public ImageName(String origName) {
//			this.origName = origName;
//		}
//		public ImageName(String origName, String miniName) {
//			this.origName = origName;
//			this.miniName = miniName;
//		}
//		public String getOrigName() {
//			return origName;
//		}
//		public void setOrigName(String origName) {
//			this.origName = origName;
//		}
//
//		public String getMiniName() {
//			return miniName;
//		}
//
//		public void setMiniName(String miniName) {
//			this.miniName = miniName;
//		}
//	}
	
	public class OSSImageException extends RuntimeException{
		/**
		 * 
		 */
		private static final long serialVersionUID = 6294850536524572781L;

		public OSSImageException() {
			super();
		}

		public OSSImageException(String message, Throwable cause) {
			super(message, cause);
		}

		public OSSImageException(String message) {
			super(message);
		}

		public OSSImageException(Throwable cause) {
			super(cause);
		}
	}
}
